using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using Common;
using SystemFrameworks;
using Microsoft.ApplicationBlocks.Data;
namespace MinCultura.Sipa.AgentesArtes
{
    /// <summary>
    /// Clase de acceso a datos para la entidad ART_NIVEL_EDUCATIVO
    /// </summary>

    public class NivelEducativo
    {

        #region propiedades

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

        #endregion


        #region Private Data Access Atributes
        private const String NIV_ID_PARAM = "@NIV_ID";
        private const String NIV_NOMBRE_PARAM = "@NIV_NOMBRE";
        private const String NIV_DETALLE_PARAM = "@NIV_DETALLE";
        private const String NIV_MODALIDAD_PARAM = "@NIV_MODALIDAD";

        #endregion Private Data Access Atributes

        /// <summary>
        /// Constructor de la clase ARTNIVELEDUCATIVO
        /// </summary>
        public NivelEducativo(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }

        public MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData BuscarNivelEducativo()
        {
            MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData response = new MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData();
            SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_ART_NIVEL_EDUCATIVO", response.Tables[0]);
            if (response.Tables[0].Rows.Count == 0)
                return null;
            return response;
        }


        public MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData ConsultarNivelEducativo(decimal parNIV_ID)
        {
            MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData response = new MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData();

            SqlParameter param1 = new SqlParameter(NIV_ID_PARAM, parNIV_ID);

            SqlParameter[] parameters = { param1 };

            SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_NIVEL_EDUCATIVO", response.Tables[0], parameters);

            if (response.Tables[0].Rows.Count == 0)
                return null;

            string nivelDetalle = response.Tables[0].Rows[0][MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_DETALLE_FIELD].ToString();
            string nivelDetalleNombre = string.Empty;
            switch (nivelDetalle)
            {
                case "N":
                    nivelDetalleNombre = "No";
                    break;
                case "S":
                    nivelDetalleNombre = "Si - Finalizados";
                    break;
                case "I":
                    nivelDetalleNombre = "No - Inconclusos";
                    break;
            }
            response.Tables[0].Rows[0][MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_DETALLE_NOMBRE_FIELD] = nivelDetalleNombre;

            string modalidad = response.Tables[0].Rows[0][MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_MODALIDAD_FIELD].ToString();
            string modalidadNombre = string.Empty;
            switch (modalidad)
            {
                case "8":
                    modalidadNombre = "Formal";
                    break;
                case "9":
                    modalidadNombre = "No Formal";
                    break;
            }
            response.Tables[0].Rows[0][MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_MODALIDAD_NOMBRE_FIELD] = modalidadNombre;

            return response;
        }

        public decimal AdicionarNivelEducativo(MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData datos)
        {
            DataTable tabla = datos.Tables[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.ART_NIVEL_EDUCATIVO_TABLE];
            decimal decNIV_ID = 0;

            try
            {
                //StartTransaction();

                foreach (DataRow row in tabla.Rows)
                {
                    SqlParameter param1 = new SqlParameter(NIV_ID_PARAM, SqlDbType.Decimal);
                    param1.Direction = ParameterDirection.Output;
                    SqlParameter param2 = new SqlParameter(NIV_NOMBRE_PARAM, row[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_NOMBRE_FIELD]);
                    SqlParameter param3 = new SqlParameter(NIV_DETALLE_PARAM, row[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_DETALLE_FIELD]);
                    SqlParameter param4 = new SqlParameter(NIV_MODALIDAD_PARAM, row[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_MODALIDAD_FIELD]);
                    SqlParameter[] parameters = { param1, param2, param3, param4 };

                    SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_NIVEL_EDUCATIVO", parameters);

                    decNIV_ID = decimal.Parse(param1.Value.ToString());
                }

                //if (this.RegistroAuditoria != null)
                //{
                //    this.RegistroAuditoria.Rows[0][RegistroAuditoriaData.REG_IDENTIFICADOR_FIELD] = decNIV_ID;
                //}

                //RegistrarAuditoria();

                //CompleteTransaction();

                return (decNIV_ID);
            }
            catch (SqlException sqlEx)
            {
                //AbortTransaction();
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_NIVEL_EDUCATIVO"), sqlEx);
            }
            catch (Exception ex)
            {
                //AbortTransaction();
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "ART_NIVEL_EDUCATIVO"), ex);
            }
        }

        public void ActualizarNivelEducativo(MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData datos)
        {
            DataTable tabla = datos.Tables[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.ART_NIVEL_EDUCATIVO_TABLE];
            MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData nivelEducativoDataAnt = new MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData();

            try
            {
                //StartTransaction();

                //if (this.RegistroAuditoria != null)
                //{
                //    nivelEducativoDataAnt = ConsultarNivelEducativo(Convert.ToDecimal(tabla.Rows[0][MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_ID_FIELD]));
                //}

                foreach (DataRow row in tabla.Rows)
                {
                    SqlParameter param1 = new SqlParameter(NIV_ID_PARAM, row[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_ID_FIELD]);
                    SqlParameter param2 = new SqlParameter(NIV_NOMBRE_PARAM, row[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_NOMBRE_FIELD]);
                    SqlParameter param3 = new SqlParameter(NIV_DETALLE_PARAM, row[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_DETALLE_FIELD]);
                    SqlParameter param4 = new SqlParameter(NIV_MODALIDAD_PARAM, row[MinCultura.Sipa.DataAccess.AgentesArtes.NivelEducativoData.NIV_MODALIDAD_FIELD]);

                    SqlParameter[] parameters = { param1, param2, param3, param4 };
                    SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_NIVEL_EDUCATIVO", parameters);
                }

                //RegistrarAuditoria(nivelEducativoDataAnt.Tables[0], tabla);

                //CompleteTransaction();
            }
            catch (SqlException sqlEx)
            {
                //AbortTransaction();
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_NIVEL_EDUCATIVO"), sqlEx);
            }
            catch (Exception ex)
            {
                //AbortTransaction();
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", "ART_NIVEL_EDUCATIVO"), ex);
            }
        }

        /// <summary>
        /// Elimina un registro de la entidad Artniveleducativo
        /// </summary>
        /// <param name="parNIV_ID">Identificador del registro
        public void EliminarNivelEducativo(decimal parNIV_ID)
        {
            try
            {
                SqlParameter param1 = new SqlParameter(NIV_ID_PARAM, parNIV_ID);

                SqlParameter[] parameters = { param1 };
                SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_NIVEL_EDUCATIVO", parameters);
            }
            catch (SqlException sqlEx)
            {
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_NIVEL_EDUCATIVO"), sqlEx);
            }
            catch (Exception ex)
            {
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "ART_NIVEL_EDUCATIVO"), ex);
            }
        }

        public void EliminarNivelEducativo(ArrayList arrIDs)
        {
            try
            {
                //StartTransaction();

                foreach (object Item in arrIDs)
                {
                    SqlParameter param1 = new SqlParameter(NIV_ID_PARAM, decimal.Parse(Item.ToString()));
                    SqlParameter[] parameters = { param1 };
                    SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_NIVEL_EDUCATIVO", parameters);
                }

                //RegistrarAuditoria();

                //CompleteTransaction();
            }
            catch (SqlException sqlEx)
            {
                //AbortTransaction();
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_NIVEL_EDUCATIVO"), sqlEx);
            }
            catch (Exception ex)
            {
                //AbortTransaction();
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "ART_NIVEL_EDUCATIVO"), ex);
            }
        }
    }
}

